//#ifdef APP-PLUS
import silenceUpdate from '@/uni_modules/rt-uni-update/js_sdk/silence-update.js'; //引入静默更新
//#endif

import { getVersion } from '@/api/common.js';

export const appUpdate = (isHand = false) => {
  // #ifdef APP-PLUS
  return new Promise((r, j) => {
    // 获取本地应用资源版本号
    plus.runtime.getProperty(plus.runtime.appid, (inf) => {
      console.log(inf);
      //获取服务器的版本号
      getVersion(
        {
          type: uni.getSystemInfoSync().platform == 'android' ? 1101 : 1102, //android或者ios
          appid: plus.runtime.appid,
          versionCode: inf.versionCode, // 打包时manifest设置的版本号
          versionName: inf.version
        },
        {
          custom: {
            toast: false
          }
        }
      )
        .then((res) => {
          console.warn('----更新----', res);
          if (res.status == 200) {
            if (typeof res.data == 'string') {
              return r(false);
            }
            if (res.data.version) {
              res.data.versionCode = Number(res.data.version.replace(/\./g, ''));
            }
            //res.data.xxx根据后台返回的数据决定（我这里后端返回的是data），所以是res.data.data
            const data = {
              // 版本更新内容 支持<br>自动换行
              describe: res.data.info,
              edition_url: res.data.url, //apk、wgt包下载地址或者应用市场地址  安卓应用市场 market://details?id=xxxx 苹果store itms-apps://itunes.apple.com/cn/app/xxxxxx
              edition_force: res.data.is_force == '1' ? 1 : 0, //是否强制更新 0代表否 1代表是
              package_type: res.data.url.includes('.wgt') ? 1 : 0, //0是整包升级（apk或者appstore或者安卓应用市场） 1是wgt升级
              edition_issue: 1, //是否发行  0否 1是 为了控制上架应用市场审核时不能弹出热更新框
              edition_number: res.data.versionCode, //版本号 最重要的manifest里的版本号 （检查更新主要以服务器返回的edition_number版本号是否大于当前app的版本号来实现是否更新）
              edition_name: res.data.version, // 版本名称 manifest里的版本名称
              edition_silence: res.data.updateType == 'silent' ? 1 : 0 // 是否静默更新 0代表否 1代表是
            };
            console.warn('====>', res.data.versionCode, inf.versionCode);
            //判断后台返回版本号是否大于当前应用版本号 && 是否发行 （上架应用市场时一定不能弹出更新提示）
            if (Number(res.data.versionCode) > Number(inf.versionCode)) {
              r(true);
              //如果是wgt升级，并且是静默更新 （注意！！！ 如果是手动检查新版本，就不用判断静默更新，请直接跳转更新页，不然点击检查新版本后会没反应）
              if (res.data.updateType == 'silent') {
                //调用静默更新方法 传入下载地址
                silenceUpdate(data.edition_url);
              } else {
                //跳转更新页面 （注意！！！如果pages.json第一页的代码里有一打开就跳转其他页面的操作，下面这行代码最好写在setTimeout里面设置延时3到5秒再执行）
                uni.navigateTo({
                  url: `/uni_modules/rt-uni-update/components/rt-uni-update/rt-uni-update?obj=${JSON.stringify(data)}`
                });
              }
            } else {
              r(false);
              if (isHand) {
                // 如果是手动检查新版本 需开启以下注释
                uni.showModal({
                  title: '提示',
                  content: '已是最新版本',
                  showCancel: false
                });
              }
            }
          }
        })
        .catch((e) => {
          console.log('---------------', e);
          j(e);
          if (isHand) {
            // 如果是手动检查新版本 需开启以下注释
            uni.showModal({
              title: '提示',
              content: '已是最新版本',
              showCancel: false
            });
          }
        });
    });
  });
  // #endif

  // #ifndef APP-PLUS
  // eslint-disable-next-line no-unreachable
  return new Promise((resolve) => {
    console.log('非 App 环境，跳过更新检查');
    resolve(false);
  });
  // #endif
};
